//: Playground - noun: a place where people can play

import UIKit

// 在swift中nil是一种特殊的类型, 可以理解为何Int, String 平级关系
// 在swift开发中, 只有可选类型可以赋值为nil, 其他类型不能赋值为nil

//let m0 : String = 10  // 这是一种错误写法
//let m1 : String = nil // 也是一种错误写法, 只有可选类型才可以赋值为nil

// 可选类型是一种泛型集合

// 一. 定义可选类型
// 方法1
var name : Optional<String> = nil

// 方法2
var name1 : String? = nil

// 二. 为可选类型赋值
// 方法1
name = Optional("Alex")
// 方法2
name = "ALex"

// 三. 取出可选类型中的值-强制解包
// 强制解包比较危险, 如果可选类型的值为nil, 强制解包会崩溃
if name != nil {
    print(name!)
}

// 四. 可选绑定
// if let 会做两件事
// (1) 先校验name1是否为空, 为空不执行{}中的代码
// (2) 不为空, 则将右侧赋值为左侧的name1, 再执行{}代码
if let name1 = name1 {
    print(name1)
}

// 五. 应用

// (1)
let path = Bundle.main.path(forResource: "home.json", ofType: nil)
let url : URL? = URL.init(string: "www.baidu.com")
if let path = path {
    let url1 = URL.init(fileURLWithPath: path)
    print(url1)
}

// (2)
let dict : [String : Any] = ["name" : "Alex", "age" : 20]
let name3 : Any? = dict["name"]


let array : [Any]? = ["Alex"]
if let array = array {
    let data = try? JSONSerialization.data(withJSONObject: array, options: JSONSerialization.WritingOptions.prettyPrinted)
}





